## Принципы ООП

Основные принципы структурирования связаны с различными аспектами базового понимания предметной задачи, которое требуется для оптимального управления соответствующей моделью:


* __абстракция__ - для выделения в моделируемом предмете важного для решения конкретной задачи по предмету, в конечном счёте — контекстное понимание предмета, формализуемое в виде класса (сущность, которая не имеет конкретного воплощения)

`Абстракция в объектно-ориентированном программировании — это использование только тех характеристик объекта, которые с достаточной точностью представляют его в данной системе. 
Основная идея состоит в том, чтобы представить объект минимальным набором полей и методов и при этом с достаточной точностью для решаемой задачи
`

* __инкапсуляция__ для быстрой и безопасной организации собственно иерархической управляемости: чтобы было достаточно простой команды «что делать», без одновременного уточнения как именно делать, так как это уже другой уровень управления;

`
Механизм языка, ограничивающий доступ одних компонентов программы к другим. Процесс разделения элементов абстракций, определяющих её структуру (данные) и поведение (методы)
`

* __наследование__ для быстрой и безопасной организации родственных понятий: чтобы было достаточно на каждом иерархическом шаге учитывать только изменения, не дублируя всё остальное, учтённое на предыдущих шагах;
`
Наследование является механизмом повторного использования кода и способствует независимому расширению программного обеспечения через открытые классы  и интерфейсы. 
Установка отношения наследования между классами порождает иерархию классов (Супер-класс-интерфейс, базовый класс, подкласс)
`

* __полиморфизм__ для определения точки, в которой единое управление лучше распараллелить или наоборот — собрать воедино.
`
способность функции(класса) обрабатывать данные разных типов
`